gets(s)栈溢出,且没有canary,没有PIE
本来想的是通过栈溢出直接跳到 if 内部输出flag,不过其地址为0x80A010B
结合gets函数遇到回车(‘\x0a’)结束输入的特性,无法将地址0x80A010B
写到返回地址上去。这个一步到位的方法pass。
从init_ABCDEFG函数中得到sub=a+b+c+d+e+f+g
,且ABCDEFG函数的地址为0x809xxxx
,可以操作。
那么问题的解决方法就变成了,通过栈溢出分别跳转到函数ABCDEFG中获得abcdefg从而得到sum,进入if分支读取flag
1 | #coding:utf-8 |